/*使用栈(顺序栈,链式栈均可)结构,可以实现进制的转换，如十进制转二进制，
 * 将对2求余的结果入栈，再把所有结果从栈中弹出即可得二进制。
 * 十进制转为八进制、十六进制同理。试编程实现对任意输入的十进制数和要求转换的进制，
 输出其转换结果(注:进制转换可使用函数实现，十进制数和相应转换的进制以函数参数的形式存在，然后主函数调用即可)
*/
#include <stdio.h>
#include <stdlib.h>

typedef struct node pnode;
struct node{
    int max;
    int top;
    int *data;
};
pnode* creat(int m)//创建顺序栈
{
    pnode *p=(pnode*)malloc(sizeof(pnode));
    p->data=(int *)malloc(sizeof(int)*m);
    p->top=0;
    p->max=m;
    return p;
}
void push(pnode* L ,int x)
{
    L->top = L->top + 1;
    L->data[L->top] = x;
}
void print(pnode* L)
{
//逐个弹出栈L中的数据元素并输出，输出数据间不需要任何间隔符号
    int q;//判断十六进制
    while(L->top!=0)
    {
        q=L->data[L->top];
        if(q==10)
            printf("A");
        else if(q==11)
            printf("B");
        else if(q==12)
            printf("C");
        else if(q==13)
            printf("D");
        else if(q==14)
            printf("E");
        else if(q==15)
            printf("F");
        else
            printf("%d",q);
        L->top=L->top-1;
    }
}

int main()
{
    int data,k;
scanf("%d",&data);//存储需要转换的数
scanf("%d",&k);//存储转换成几进制
pnode* L=creat(100);
int n=data;
int a;
switch (k)
{
case 2: a=2;break;
case 8:a=8;break;
case 16:a=16;break;
}
while(n%a!=0 ||n>0)
{
push(L ,n%a);//将所得余数输进数组
n=n/a;
}
print(L);

}